using namespace toolkit;
using namespace std;

#include <string.h>
#include <fstream>
#include <list>
#include "Indice.h"
#include "Arbol.h"
#include "RegistroArbol.h"

int IndexadoBSharp::buscar(Indice* indice, list<string> key) {
	string filePath = indice->getNombreArch();
	Arbol tree;
	for (unsigned int i = 0; i < key.size(); i++) {
		string filePath = indice->getNombreArch();
		stringstream out;
		out << i;
		filePath.append(out.str());
		tree.Abrir((char*)filePath.c_str());
		for (list<string>::iterator it = key.begin(); it != key.end(); it++) {
			RegistroArbol* registro = tree.ObtenerRegistro(&(*it));
			if (registro != NULL) {
				return(registro->offset);
			}
		}
	}
	return NULL;
}

void IndexadoBSharp::indexar(Indice* indice, list<string> key, int offset){
	string filePath = indice->getNombreArch();
	RegistroArbol registro;
	registro.offset = offset;
	for (int i = 0; i < key.size(); i++) {
		string filePath = indice->getNombreArch();
		//TODO Ver como hacemos con la logitud del indice
		Arbol tree;
		stringstream out;
		out << i;
		filePath->append(out.str());
		fstream* destino;
		file.open(nombreArchivo.c_str(), ios::out | ios::in | ios::binary);
		if (!file.eof()) {
			tree.Abrir(filePath.c_str());
			tree.InsertarRegistro(&(vector[i]), &registro);
		} else {
			tree.Crear(filePath.c_str());
			tree.InsertarRegistro(&(vector[i]), &registro);
		}
	}
}

int IndexadoBSharp::eliminar(Indice* indice, list<string> key){
	return (1);
}
